package pms.dao;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import pms.om.Abwesenheitsart;

public class AbwesenheitsartDao extends HibernateDaoSupport {

	/**
	 * R&uuml;ckgabe einer {@link Abwesenheitsart} anhand der Id
	 * @param id
	 * @return ausgew&auml;hlte Abwesenheitsart
	 */

	public Abwesenheitsart findById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Abwesenheitsart) template.get(Abwesenheitsart.class, id);
	}
				
	
	/**
	 * R&uuml;ckgabe aller Abwesenheitsarten
	 * @return alle Abwwesenheitsarten
	 */

	@SuppressWarnings("unchecked")
	public Set<Abwesenheitsart> findAll() {
		HibernateTemplate template = getHibernateTemplate();
		List<Abwesenheitsart> alleabwesenheitsarten = template.loadAll(Abwesenheitsart.class);
		Set<Abwesenheitsart> results = new HashSet<Abwesenheitsart>();
		for (Abwesenheitsart abwesenheitsart : alleabwesenheitsarten) {
			results.add(abwesenheitsart);			
		}
		return results;
	}

		    
	/**
	 * Anlegen einer neuen Abwesenheitsart
	 * @param abwesenheitsart
	 * @param abwesenheitsfarbe
	 */

	public void create(String abwesenheitsart, String abwesenheitsfarbe) {
		HibernateTemplate template = getHibernateTemplate();
		Abwesenheitsart a = new Abwesenheitsart(abwesenheitsart, abwesenheitsfarbe);
		template.persist(a);
	}

	/**
	 * &Auml;ndern der Abwesenheitsart anhand der ausgew&auml;hlten Id auf die neuen 
	 * &uuml;bergebenen Eigenschaften
	 * @param id
	 * @param abwesenheitsart
	 * @param abwesenheitsfarbe
	 */

	public void modify(int id, String abwesenheitsart, String abwesenheitsfarbe) {
		HibernateTemplate template = getHibernateTemplate();
		Abwesenheitsart a = (Abwesenheitsart) template.get(Abwesenheitsart.class, id);
		a.setAbwesenheitsart(abwesenheitsart);
		a.setAbwesenheitsfarbe(abwesenheitsfarbe);
		template.saveOrUpdate(a);
		template.flush();
	}

	/**
	 * L&ouml;schen der ausgew&auml;hlten Abwesenheitsart
	 * @param id
	 */

	public boolean deleteById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		boolean result = false;
		Abwesenheitsart a = findById(id);  // zunächste suche die Abwesenheitsart mit der id
		if (a.getAbwesenheitendesmitarbeiters().isEmpty()) {    // wenn noch keine Abwesenheiten mit der Abwesenheitsart existieren
			template.delete(a); // dann löschen
			template.flush();
			result = true;
		}
		return result;
	}

}
